//=======================================================
// 作者：KingSley
// 描述：
//=======================================================
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.IO;
using UnityEditor;
using System.Text;
using LitJson;
using UnityEngine.UI;

namespace Babybus.Uno
{
    public class JsonManager : MonoBehaviour
    {
        public PersonList personList = new PersonList();
        private Text text;
        
        void Start()
        {
            text = GameObject.Find("Text").GetComponent<Text>();

            // 初始化人物信息
            Person person = new Person();
            person.Name = "Czhenya";
            person.HP = 100;
            person.Level = 30;
            person.Exp = 999.99;
            person.Attak = 38;

            // 调用保存方法
            Save(person);
        }

        /// <summary>
        /// 保存JSON数据到本地的方法
        /// </summary>
        /// <param name="player">要保存的对象</param>
        public void Save(Person player)
        {
            // 打包后Resources文件夹不能存储文件，如需打包后使用自行更换目录
            string filePath = Application.dataPath + @"/Resources/JsonPerson.json";
            Debug.Log(Application.dataPath + @"/Resources/JsonPerson.json");

            if (!File.Exists(filePath))  // 不存在就创建键值对
            {
                personList.dictionary.Add("Name", player.Name);
                personList.dictionary.Add("HP", player.HP.ToString());
                personList.dictionary.Add("Level", player.Level.ToString());
                personList.dictionary.Add("Exp", player.Exp.ToString());
                personList.dictionary.Add("Attak", player.Attak.ToString());
            }
            else   // 若存在就更新值
            {
                personList.dictionary["Name"] = player.Name;
                personList.dictionary["HP"] = player.HP.ToString();
                personList.dictionary["Level"] = player.Level.ToString();
                personList.dictionary["Exp"] = player.Exp.ToString();
                personList.dictionary["Attak"] = player.Attak.ToString();
            }

            // 找到当前路径
            FileInfo file = new FileInfo(filePath);
            // 判断有没有文件，有则打开文件，，没有创建后打开文件
            StreamWriter sw = file.CreateText();
            // ToJson接口将你的列表类传进去，，并自动转换为string类型
            string json = JsonMapper.ToJson(personList.dictionary);
            // 将转换好的字符串存进文件，
            sw.WriteLine(json);
            // 注意释放资源
            sw.Close();
            sw.Dispose();

            AssetDatabase.Refresh();

        }

        /// <summary>
        /// 读取保存数据的方法
        /// </summary>
        public void LoadPerson()
        {
            // TextAsset该类是用来读取配置文件的
            TextAsset asset = Resources.Load("JsonPerson") as TextAsset;
            if (!asset)  //读不到就退出此方法
                return;
            
            string strdata = asset.text;
            JsonData jsdata3 = JsonMapper.ToObject(strdata);
            // 在这里循环输出表示读到了数据，，即此数据可以使用了
            /*for (int i = 0; i < jsdata3.Count; i++)
            {
                Debug.Log(jsdata3[i]);
            }*/
            // 使用foreach输出的话会以[键，值]，，，
            foreach (var item in jsdata3)
            {
                Debug.Log(item);
                text.text += item.ToString() + "\n";
            }

        }

        private void OnGUI()
        {   //点击读取存储的文件
            if (GUILayout.Button("LoadTXT"))
            {
                LoadPerson();
            }
        }
    }
}
